home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 1
/
Nebula One.iso
/
Internet
/
WWW
/
gform.1.1
/
send_email.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-02-10
|
1KB
|
71 lines
#include <string.h>
/***
* Send an email message
*
* to - The intended recipient.
* sub - The subject of the message.
* bod - The message body.
*
* returns 0 on success
* -1 on failure.
*
***/
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <errno.h>
#include "config.h"
#ifndef MAILER
#define MAILER "/usr/bin/mail"
#endif
void *malloc();
int send_email(to,sub,body)
char *to, *sub, *body;
{
int fd[2], pid;
FILE *f1;
char *msg;
msg = (char *) malloc(strlen(body)+strlen(sub)+strlen(to)+16);
sprintf(msg,"To: %s\n",to);
strcat(msg,"Subject: "); strcat(msg,sub);strcat(msg,"\n");
strcat(msg,body);
/* set child process STDIN to parent fd */
if (pipe(fd) <0)
return(-1);
if ((pid = fork()) < 0)
return(-1);
else if (pid >0) { /* parent */
close(fd[0]); /* close read end */
write(fd[1], msg, strlen(msg));
close(fd[1]);
if (waitpid(pid, NULL, 0) <0)
return(-1);
/* close(fd[1]); */
return(0);
} else { /* child */
close(fd[1]);
if (fd[0] != STDIN_FILENO) {
if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
return(-1);
close(fd[0]);
} /* invoke mailer which expects STDIN */
if (execl(MAILER,MAILER,to,0) <0)
return(-1);
close(fd[0]);
exit(0);
}
return(0);
}